//
//  main.m
//  03-集合
//
//  Created by dllo on 16/7/6.
//  Copyright © 2016年 dllo. All rights reserved.
//

#import <Foundation/Foundation.h>

int main(int argc, const char * argv[]) {
   //1.数组
    //数组：可变数组和不可变数组
    // 数组主要是有序的存放在元素的集合类型，并且可以通过下标取值
    //注意： 数组中只能存放对象类型
    //不可变数组 只能取值
    // 可变数组  可以进行增 删 减的操作
    
    // 2>初始化数组
    /** 《1》初始化方法 initWithObjects 后面填入的参数一定是对象类型*/
    /**  可变参数  C语言中的链表（后续讲）*/
    /** 顺序填入你需要的元素 */
    NSArray *arr = [[NSArray alloc]initWithObjects:@"d",@"ds", nil];
    //《2》构造器方法
    NSArray *arr1 = [NSArray arrayWithObjects:@"ddd",@"dds", nil];
    // 《3》字面量
    //NSObject *objc= nil;
//    NSArray *arr2 = @[@"d",objc,@"dds"];
//    NSLog(@"%@",arr2);
    //三种初始化方法，推荐字面量
    //字面量可以识别，对象是否为空；但一般的初始化不可以
    /** 如果为空 ，字面量会崩溃 ：[__NSPlaceholderArray initWithObjects:count:]: attempt to insert nil object from objects[1]'*/
    
    //3> 取值相关
    // <1> count 取得数组中元素个数
    NSLog(@"%ld",arr.count);
    // <2> 数组中取值 通过下标取值
    NSString *str =[arr objectAtIndex:0];
    NSLog(@"%@",str);
    // <3>.语法糖 取值方式 快捷取值
    NSString *str1 = arr[0];
    // <4>.根据值取下标
    NSInteger indexForObject = [arr indexOfObject:@"d"];
    NSLog(@"%ld",indexForObject);
    // <5>.判断对象是否存在于数组中
   BOOL isHaveObject =[arr containsObject:@"dd"];
    NSLog(@"%@",isHaveObject ? @"YES" : @"NO");
    /** 去数组中第一个对象和最后一个对象 （如果数组为空，返回的对象为空，并且不会崩溃）*/
    [arr firstObject];
    [arr lastObject];
    //4.不可变数组改变元素 会生成新的数组 不会在原数组基础上修改
   NSArray *Marr = [arr arrayByAddingObject:@"aaa"];
    NSLog(@"%@",Marr);
    // 2> 数组中添加另一个数组中的所有元素
    NSArray *Marr1 = [arr arrayByAddingObjectsFromArray:arr1];
    NSLog(@"%@",Marr1);
    
    
    
    // NSMutableArray
    
    //1.初始化 同 不可变数组
    //遇到可变数组，只能使用初始化方法或者便利构造器
    // 字面量创建方法，不推荐使用
    NSMutableArray *marr = @[@"1",@"2"].mutableCopy;
    //2.取值方式与不可变数组  一样
    // 3.可变数组改变元素
    //增加
    [marr addObject:@"3"];
    // 插入
    [marr insertObject:@"0" atIndex:0];
    // 移除
    [marr removeLastObject];
    [marr removeObjectAtIndex:0];
    //[marr removeAllObjects];
    // 替换
    [marr replaceObjectAtIndex:0 withObject:@"d"];
    NSLog(@"%@",marr);
    // 可变 与 不可变区别
    // 1. 可变可以改, 不可变不可以改
    // 2. 不可变调用改变的方法时, 会生成对象;可变调用改变方法时,在对象本身上进行修改
    // 3. 可变的继承于不可变的
    // 将字符串根据某个子串，截取成数组
    // 根据哪个子串截取，哪个子串消失
    NSString *strOf = @"www.lanou.com";
    NSArray *Arr = [strOf componentsSeparatedByString:@"."];
    NSLog(@"%@",Arr);
    // 更具某个子串拼接成一个字符串
    NSArray *arrOfPlace = @[@"北京",@"上海",@"西安"];
    NSString *strOfPlace = [arrOfPlace componentsJoinedByString:@"&"];
    NSLog(@"%@",strOfPlace);
    
    
    return 0;
}
